/*
 * Copyright 2021 Rockchip Electronics Co. LTD
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */
#ifndef __LOAD_BMP_H__
#define __LOAD_BMP_H__

#include "rk_type.h"

#ifdef __cplusplus
#if __cplusplus
extern "C"
{
#endif
#endif /* End of #ifdef __cplusplus */

	/* the color format OSD supported */
	typedef enum rkOSD_COLOR_FMT_E
	{
		OSD_COLOR_FMT_RGB444 = 0,
		OSD_COLOR_FMT_RGB4444 = 1,
		OSD_COLOR_FMT_RGB555 = 2,
		OSD_COLOR_FMT_RGB565 = 3,
		OSD_COLOR_FMT_ARGB1555 = 4,
		OSD_COLOR_FMT_BGRA5551 = 5,
		OSD_COLOR_FMT_RGB888 = 6,
		OSD_COLOR_FMT_BGR888 = 7,
		OSD_COLOR_FMT_ARGB8888 = 8,
		OSD_COLOR_FMT_BGRA8888 = 9,
		OSD_COLOR_FMT_BUTT
	} OSD_COLOR_FMT_E;

	typedef struct rkOSD_RGB_S
	{
		RK_U8 u8B;
		RK_U8 u8G;
		RK_U8 u8R;
		RK_U8 u8Reserved;
	} OSD_RGB_S;

	typedef struct rkOSD_SURFACE_S
	{
		OSD_COLOR_FMT_E enColorFmt; /* color format */
		RK_U8 *pu8PhyAddr;			/* physical address */
		RK_U16 u16Height;			/* operation height */
		RK_U16 u16Width;			/* operation width */
		RK_U16 u16Stride;			/* surface stride */
		RK_U16 u16Reserved;
	} OSD_SURFACE_S;

	typedef struct tag_OSD_Logo
	{
		RK_U32 width;	   /* out */
		RK_U32 height;	   /* out */
		RK_U32 stride;	   /* in */
		RK_U8 *pRGBBuffer; /* in/out */
	} OSD_LOGO_T;

	typedef struct tag_OSD_BITMAPINFOHEADER
	{
		RK_U16 biSize;
		RK_U32 biWidth;
		RK_S32 biHeight;
		RK_U16 biPlanes;
		RK_U16 biBitCount;
		RK_U32 biCompression;
		RK_U32 biSizeImage;
		RK_U32 biXPelsPerMeter;
		RK_U32 biYPelsPerMeter;
		RK_U32 biClrUsed;
		RK_U32 biClrImportant;
	} OSD_BITMAPINFOHEADER;

	typedef struct tag_OSD_BITMAPFILEHEADER
	{
		RK_U32 bfSize;
		RK_U16 bfReserved1;
		RK_U16 bfReserved2;
		RK_U32 bfOffBits;
	} OSD_BITMAPFILEHEADER;

	typedef struct tag_OSD_RGBQUAD
	{
		RK_U8 rgbBlue;
		RK_U8 rgbGreen;
		RK_U8 rgbRed;
		RK_U8 rgbReserved;
	} OSD_RGBQUAD;

	typedef struct tag_OSD_BITMAPINFO
	{
		OSD_BITMAPINFOHEADER bmiHeader;
		OSD_RGBQUAD bmiColors[1];
	} OSD_BITMAPINFO;

	typedef struct rkOSD_COMPONENT_INFO_S
	{
		RK_S32 alen;
		RK_S32 rlen;
		RK_S32 glen;
		RK_S32 blen;
	} OSD_COMP_INFO;

	RK_S32 load_image(const char *filename, OSD_LOGO_T *pVideoLogo);
	
	RK_S32 load_bitmap_2_surface(const char *pstFileName, const OSD_SURFACE_S *pstSurface, RK_U8 *pu8Virt);

	RK_S32 create_surface_by_bitmap(const char *pstFileName, OSD_SURFACE_S *pstSurface, RK_U8 *pu8Virt);

	RK_S32 get_bmp_info(const char *filename, OSD_BITMAPFILEHEADER *pBmpFileHeader, OSD_BITMAPINFO *pBmpInfo);

#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* End of #ifdef __cplusplus */

#endif /* End of #ifndef __LOAD_BMP_H__*/
